import { Entity, Column, PrimaryGeneratedColumn, BeforeInsert } from 'typeorm';
import { Exclude } from 'class-transformer';
import * as bcrypt from 'bcrypt'
@Entity('user')
export class User {
  // 主键
  @PrimaryGeneratedColumn('uuid')
  id: number;

  // 用户名
  @Column({
    unique: true,
    comment: '用户名',
    length: 20,
  })
  username: string;

  // 密码
  @Exclude()
  @Column({
    comment: '密码',
    length: 100,
  })
  password: string;

  // 昵称
  @Column({
    comment: '昵称',
    length: 20,
    nullable: true
  })
  nickname: string;

  // 头像
  @Column({
    comment: '头像',
    length: 50,
    nullable: true//可选
  })
  avatar?: string;

  // 角色
  @Column('simple-enum', {
    enum: ['admin', 'user'],
    comment: '角色',
    default: 'user'//默认值
  })
  role?: string

  // 创建时间
  @Column({
    type: 'timestamp',
    comment: '创建时间',
    default: () => 'CURRENT_TIMESTAMP',
  })
  createTime: Date;

  // 更新时间
  @Column({
    type: 'timestamp',
    comment: '更新时间',
    default: () => 'CURRENT_TIMESTAMP',
  })
  updateTime: Date;

  // 是否删除
  @Exclude()
  @Column({
    type: 'tinyint',// 使用 tinyint 来表示布尔值（0 或 1）
    comment: '是否删除，0：未删除，1：已删除',
    default: 0
  })
  isDelete: number;

  // @BeforeInsert装饰encryptPwd方法，表示该方法在数据插入之前调用，保证插入数据库的密码都是加密的
  @BeforeInsert()
  async encryptPwd() {
    this.password = await bcrypt.hashSync(this.password, 10)
  }
}
